//逆矩阵
//inverse_matrix.cpp

//求n阶可逆矩阵的逆矩阵

//设A是一个n阶满秩矩阵，则它是可逆的
//事实上，秩为n的满秩方程组中左边的n阶矩阵A满足Ax = b，且x = Bb，其中B是A的逆矩阵
//定理：
//n阶矩阵的乘法和求n阶矩阵的逆矩阵具有相同的时间复杂度
//
//设A是一个n阶对称正定矩阵，根据对称正定矩阵的性质可以使用递归的方法求出A的逆矩阵
//设A = | B CT |，其中CT是子矩阵C的转置矩阵
//		| C D  |
//引入矩阵S = D - CB'CT，其中B'是矩阵B的逆矩阵
//经过进一步转化可以用B和S矩阵的逆矩阵B'和S'来表示A的逆矩阵A'
//则通过求n/2阶矩阵B和S的逆矩阵B'和S'就可以得到矩阵A的逆矩阵A'
//从而可以用分而治之的策略来求解对称正定矩阵A的逆矩阵
//
//当A是普通的可逆矩阵时，则先求AT*A的逆矩阵，其中AT是A的转置矩阵
//由于AT*A必然是一个对称正定矩阵，因此可以通过上述的分支法策略求得AT*A的逆矩阵
//再经过一次矩阵转化即可得到原矩阵A的逆矩阵
//
//上面的描述确实比较晦涩，逆矩阵求解过程比较麻烦所以我只做了最简单的描述
//更加深入的内容还有正定矩阵相关的算法
//这些内容请参考算法导论第28章28.4矩阵求逆和28.5对称正定矩阵与最小二乘逼近

//void inverse_matrix(matrix e, matrix& inverse)
